home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / newalien.s < prev    next >
Text File  |  1997-01-31  |  15KB  |  949 lines

  1. ItsANasty:
  2.  
  3.  tst.b NASTY
  4.  bne .yesnas
  5.  move.w #-1,12(a0)
  6.  rts
  7. .yesnas:
  8.  
  9.  move.w #$1f1f,14(a0)
  10.  
  11.  move.b worry(a0),d0
  12.  move.b d0,d1
  13.  and.w #128,d1
  14.  and.b #127,d0
  15.  sub.b #1,d0
  16.  bge.s .oknn
  17.  move.b #0,d0
  18. .oknn: 
  19.  add.b d0,d1
  20.  move.b d1,worry(a0)
  21.  
  22.  move.w (a0),CollId
  23.  move.w #80,extlen
  24.  move.b #1,awayfromwall
  25.  
  26.  move.l #20*256,StepUpVal
  27.  move.l #20*256,StepDownVal
  28.  move.l #80*128,thingheight
  29.  move.l #4,deadframe
  30.  move.w #0,screamsound
  31.  move.w #40,nasheight
  32.  clr.b gotgun
  33.  move.w 12(a0),d2
  34.  bge.s .stillalive
  35. .notthisone:
  36.  move.w 12(a0),GraphicRoom(a0)
  37.  rts
  38. .stillalive:
  39.  
  40.  tst.b numlives(a0)
  41.  bgt .notdying
  42.  
  43.  move.w ThirdTimer(a0),d1
  44.  sub.w TempFrames,d1
  45.  bge.s .noneg
  46.  move.w #0,d1
  47. .noneg:
  48.  move.w d1,ThirdTimer(a0)
  49.  
  50.  move.w .dyinganim(pc,d1.w*2),10(a0)
  51.  
  52.  move.b #0,numlives(a0)
  53.  move.l ZoneAdds,a1
  54.  move.l (a1,d2.w*4),a1
  55.  add.l LEVELDATA,a1
  56.  
  57.  move.l ToZoneFloor(a1),d0
  58.  tst.b ObjInTop(a0)
  59.  beq.s .notintop
  60.  move.l ToUpperFloor(a1),d0
  61. .notintop:
  62.  asr.l #7,d0
  63.  sub.w #64,d0
  64.  move.w d0,4(a0)
  65.  move.w 12(a0),GraphicRoom(a0)
  66.  rts
  67.  
  68. .dyinganim:
  69.  dcb.w 11,33
  70.  dcb.w 15,32
  71.  
  72.  
  73. .notdying: 
  74.  
  75.  move.w 12(a0),d2
  76.  move.l ZoneAdds,a5
  77.  move.l (a5,d2.w*4),d0
  78.  add.l LEVELDATA,d0
  79.  move.l d0,objroom
  80.  
  81.  jsr ViewpointToDraw
  82.  
  83.  asl.l #2,d0
  84.  add.l alframe,d0
  85.  
  86.  move.l d0,8(a0)
  87.  
  88.  move.w #0,DEFAULTMODE
  89.  move.w #0,RESPONSEMODE
  90.  move.w #0,RETREATMODE
  91.  move.w #0,FOLLOWUPMODE
  92.  
  93.  move.w #6,prowlspeed
  94.  move.w #10,responsespeed
  95.  move.w #8,retreatspeed
  96.  move.w #8,followupspeed
  97.  move.w #0,FOLLOWUPTIMER
  98.  move.w #20,REACTIONTIME
  99.  
  100.  jsr AIROUTINE
  101.  
  102.  rts
  103.  
  104. BOLOLOX:
  105.  
  106.  tst.b 17(a0)
  107.  beq.s .cantseeplayer
  108.  tst.w ThirdTimer(a0)
  109.  ble NastyAttack
  110.  move.w TempFrames,d0
  111.  sub.w d0,ThirdTimer(a0)
  112.  bra .waitandsee
  113.  
  114. .cantseeplayer:
  115.  
  116.  jsr GetRand
  117.  lsr.w #4,d0
  118.  and.w #63,d0
  119.  add.w #20,d0
  120.  move.w d0,ThirdTimer(a0)
  121.  
  122. .waitandsee:
  123.  
  124.  move.w #25,FourthTimer(a0)
  125.  
  126.  move.w 12(a0),d2
  127.  move.l ZoneAdds,a5
  128.  move.l (a5,d2.w*4),d0
  129.  add.l LEVELDATA,d0
  130.  move.l d0,objroom
  131.  
  132.  jsr ViewpointToDraw
  133.  
  134.  asl.l #2,d0
  135.  add.l alframe,d0
  136.  
  137.  move.l d0,8(a0)
  138.  
  139.  move.w 4(a0),d0
  140.  sub.w #40,d0
  141.  ext.l d0
  142.  asl.l #7,d0
  143.  move.l d0,newy
  144.  move.l d0,oldy
  145.  
  146.  move.w 12(a0),FromZone
  147.  bsr CheckTeleport
  148.  tst.b OKTEL
  149.  beq.s .notel
  150.  move.l floortemp,d0
  151.  asr.l #7,d0
  152.  add.w d0,4(a0)
  153.  bra .nochangedir
  154. .notel:
  155.  
  156.  move.w maxspd(a0),d2
  157.  muls TempFrames,d2
  158.  move.w d2,speed
  159.  move.w Facing(a0),d0
  160.  move.b ObjInTop(a0),StoodInTop
  161.  movem.l d0/a0/a1/a3/a4/d7,-(a7)
  162.  jsr GoInDirection
  163.  move.w #%1000000000,wallflags
  164.  
  165.  move.l #%111111110111100001,CollideFlags
  166.  bsr Collision
  167.  tst.b hitwall
  168.  beq.s .canmove
  169.  
  170.  move.w oldx,newx
  171.  move.w oldz,newz
  172.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  173.  bra .hitathing
  174.  
  175. .canmove:
  176.  
  177.  clr.b wallbounce
  178.  jsr MoveObject
  179.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  180.  move.b StoodInTop,ObjInTop(a0)
  181.  
  182. .hitathing:
  183.  
  184.  tst.b hitwall
  185.  beq.s .nochangedir
  186.  move.w #-1,ObjTimer(a0)
  187. .nochangedir
  188.  
  189.  move.l objroom,a2
  190.  move.w (a2),12(a0)
  191.  move.w newx,(a1)
  192.  move.w newz,4(a1)
  193.  
  194.  move.w (a2),d0
  195.  move.l #ZoneBrightTable,a5
  196.  move.l (a5,d0.w*4),d0
  197.  tst.b ObjInTop(a0)
  198.  bne.s .okbit
  199.  swap d0
  200. .okbit:
  201.  move.w d0,2(a0)
  202.  
  203.  move.l ToZoneFloor(a2),d0
  204.  tst.b ObjInTop(a0)
  205.  beq.s .notintopp
  206.  move.l ToUpperFloor(a2),d0
  207. .notintopp:
  208.  asr.l #7,d0
  209.  sub.w #40,d0
  210.  move.w d0,4(a0)
  211.  
  212.  moveq #0,d2
  213.  move.b damagetaken(a0),d2
  214.  beq .noscream
  215.  
  216.  sub.b d2,numlives(a0)
  217.  bgt .notdeadyet
  218.  
  219.  cmp.b #1,d2
  220.  ble .noexplode
  221.  
  222.  movem.l d0-d7/a0-a6,-(a7)
  223.  sub.l ObjectPoints,a1
  224.  add.l #ObjRotated,a1
  225.  move.l (a1),Noisex
  226.  move.w #400,Noisevol
  227.  move.w #14,Samplenum
  228.  move.b #1,chanpick
  229.  clr.b notifplaying
  230.  st backbeat
  231.  move.b 1(a0),IDNUM
  232.  jsr MakeSomeNoise
  233.  movem.l (a7)+,d0-d7/a0-a6
  234.  
  235.  movem.l d0-d7/a0-a6,-(a7)
  236.  move.w #0,d0
  237.  asr.w #2,d2
  238.  tst.w d2
  239.  bgt.s .ko
  240.  moveq #1,d2
  241. .ko:
  242.  move.w #31,d3
  243.  jsr ExplodeIntoBits
  244.  movem.l (a7)+,d0-d7/a0-a6
  245.  
  246.  cmp.b #40,d2
  247.  blt .noexplode
  248.  
  249.  move.w #-1,12(a0)
  250.  move.w 12(a0),GraphicRoom(a0)
  251.  rts
  252.  
  253. .noexplode:
  254.  
  255.  movem.l d0-d7/a0-a6,-(a7)
  256.  sub.l ObjectPoints,a1
  257.  add.l #ObjRotated,a1
  258.  move.l (a1),Noisex
  259.  move.w #200,Noisevol
  260.  move.w screamsound,Samplenum
  261.  move.b #1,chanpick
  262.  clr.b notifplaying
  263.  st backbeat
  264.  move.b 1(a0),IDNUM
  265.  jsr MakeSomeNoise
  266.  PROTICHECK a1
  267.  movem.l (a7)+,d0-d7/a0-a6
  268.  
  269.  move.w #25,ThirdTimer(a0)
  270.  move.w 12(a0),GraphicRoom(a0) 
  271.  rts
  272.  
  273. .notdeadyet:
  274.  clr.b damagetaken(a0)
  275.  movem.l d0-d7/a0-a6,-(a7)
  276.  sub.l ObjectPoints,a1
  277.  add.l #ObjRotated,a1
  278.  move.l (a1),Noisex
  279.  move.w #200,Noisevol
  280.  move.w screamsound,Samplenum
  281.  move.b #1,chanpick
  282.  clr.b notifplaying
  283.  move.b 1(a0),IDNUM
  284.  st backbeat
  285.  jsr MakeSomeNoise
  286.  movem.l (a7)+,d0-d7/a0-a6
  287.  
  288. .noscream
  289.  
  290.  
  291.  move.w TempFrames,d0
  292.  sub.w d0,ObjTimer(a0)
  293.  bge.s .keepsamedir
  294.  
  295.  jsr GetRand
  296.  and.w #8190,d0
  297.  move.w d0,Facing(a0)
  298.  move.w #50,ObjTimer(a0)
  299.  
  300. .keepsamedir:
  301.  
  302.  move.w TempFrames,d0
  303.  sub.w d0,SecTimer(a0)
  304.  bge.s .nohiss
  305.  
  306.  jsr GetRand
  307.  lsr.w #6,d0
  308.  and.w #1,d0
  309.  add.w #17,d0
  310.  movem.l d0-d7/a0-a6,-(a7)
  311.  sub.l ObjectPoints,a1
  312.  add.l #ObjRotated,a1
  313.  move.l (a1),Noisex
  314.  move.w #100,Noisevol
  315.  move.w d0,Samplenum
  316.  move.b #1,chanpick
  317.  clr.b notifplaying
  318.  move.b 1(a0),IDNUM
  319.  st backbeat
  320.  jsr MakeSomeNoise
  321.  movem.l (a7)+,d0-d7/a0-a6
  322.  
  323.  Jsr GetRand
  324.  lsr.w #6,d0
  325.  and.w #255,d0
  326.  add.w #300,d0
  327.  move.w d0,SecTimer(a0)
  328.  
  329. .nohiss:
  330.  
  331.  move.b ObjInTop(a0),ViewerTop
  332.  move.b PLR1_StoodInTop,TargetTop
  333.  move.l PLR1_Roompt,ToRoom
  334.  move.l objroom,FromRoom
  335.  move.w newx,Viewerx
  336.  move.w newz,Viewerz
  337.  move.w PLR1_xoff,Targetx
  338.  move.w PLR1_zoff,Targetz
  339.  move.l PLR1_yoff,d0
  340.  asr.l #7,d0
  341.  move.w d0,Targety
  342.  move.w 4(a0),Viewery
  343.  jsr CanItBeSeen
  344.  
  345.  clr.b 17(a0)
  346.  
  347.  tst.b CanSee
  348.  beq .carryonprowling
  349.  
  350.  move.b #1,17(a0)
  351.  
  352. .carryonprowling:
  353.  
  354.  move.b ObjInTop(a0),ViewerTop
  355.  move.b PLR2_StoodInTop,TargetTop
  356.  move.l PLR2_Roompt,ToRoom
  357.  move.l objroom,FromRoom
  358.  move.w newx,Viewerx
  359.  move.w newz,Viewerz
  360.  move.w PLR2_xoff,Targetx
  361.  move.w PLR2_zoff,Targetz
  362.  move.l PLR2_yoff,d0
  363.  asr.l #7,d0
  364.  move.w d0,Targety
  365.  move.w 4(a0),Viewery
  366.  jsr CanItBeSeen
  367.  
  368.  tst.b CanSee
  369.  beq .carryonprowling2
  370.  
  371.  or.b #2,17(a0)
  372.  
  373. .carryonprowling2:
  374.  
  375.  move.w 12(a0),GraphicRoom(a0)
  376.  rts
  377.  
  378. NastyAttack:
  379.  
  380.  move.w 12(a0),d2
  381.  move.l ZoneAdds,a5
  382.  move.l (a5,d2.w*4),d0
  383.  add.l LEVELDATA,d0
  384.  move.l d0,objroom
  385.  jsr ViewpointToDraw
  386.  asl.l #2,d0
  387.  add.l alframe,d0
  388.  move.l d0,8(a0)
  389.  
  390.  btst #0,17(a0)
  391.  beq NastyAttackPLR2
  392.  btst #1,17(a0)
  393.  beq NastyAttackPLR1
  394.  
  395.  move.l ObjectPoints,a1
  396.  move.w (a0),d0
  397.  move.w (a1,d0.w*8),d1
  398.  move.w 4(a1,d0.w*8),d2
  399.  
  400.  move.w PLR1_xoff,d3
  401.  move.w PLR1_zoff,d4
  402.  sub.w d1,d3
  403.  sub.w d2,d4
  404.  muls d3,d3
  405.  muls d4,d4
  406.  add.l d4,d3
  407.  move.w PLR2_xoff,d4
  408.  move.w PLR2_zoff,d5
  409.  sub.w d1,d4
  410.  sub.w d2,d5
  411.  muls d4,d4
  412.  muls d5,d5
  413.  add.l d5,d4
  414.  cmp.l d3,d4
  415.  ble NastyAttackPLR2
  416.  
  417.  
  418. NastyAttackPLR1:
  419.  
  420.  move.w 12(a0),FromZone
  421.  bsr CheckTeleport
  422.  tst.b OKTEL
  423.  beq.s .notel
  424.  move.l floortemp,d0
  425.  asr.l #7,d0
  426.  add.w d0,4(a0)
  427.  bra .NoMunch
  428. .notel:
  429.  
  430.  move.w PLR1_xoff,newx
  431.  move.w PLR1_zoff,newz
  432.  move.w PLR1_sinval,tempsin
  433.  move.w PLR1_cosval,tempcos
  434.  move.w p1_xoff,tempx
  435.  move.w p1_zoff,tempz
  436.  jsr RunAround
  437.  
  438.  move.w (a0),d1
  439.  move.l #ObjRotated,a6
  440.  move.l ObjectPoints,a1
  441.  lea (a1,d1.w*8),a1
  442.  lea (a6,d1.w*8),a6
  443.  move.w (a1),oldx
  444.  move.w 4(a1),oldz
  445.  move.w maxspd(a0),d2
  446.  muls.w TempFrames,d2
  447.  move.w d2,speed
  448.  move.w #160,Range
  449.  move.w 4(a0),d0
  450.  ext.l d0
  451.  asl.l #7,d0
  452.  sub.l #40*128,d0
  453.  move.l d0,newy
  454.  move.l d0,oldy
  455.  
  456.  move.b ObjInTop(a0),StoodInTop
  457.  movem.l d0/a0/a1/a3/a4/d7,-(a7)
  458.  clr.b canshove
  459.  clr.b GotThere
  460.  jsr HeadTowardsAng
  461.  move.w #%1000000000,wallflags
  462.  
  463.  move.l #%100000,CollideFlags
  464.  jsr Collision
  465.  tst.b hitwall
  466.  beq.s .nothitplayer
  467.  
  468.  move.w oldx,newx
  469.  move.w oldz,newz
  470.  st GotThere
  471.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  472.  bra .hitathing
  473.  
  474. .nothitplayer:
  475.  
  476.  move.l #%11111111110111000001,CollideFlags
  477.  jsr Collision
  478.  tst.b hitwall
  479.  beq.s .canmove
  480.  
  481.  move.w oldx,newx
  482.  move.w oldz,newz
  483.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  484.  bra .hitathing
  485.  
  486. .canmove:
  487.  
  488.  clr.b wallbounce
  489.  Jsr MoveObject
  490.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  491.  move.b StoodInTop,ObjInTop(a0)
  492.  
  493.  move.w AngRet,Facing(a0)
  494.  
  495. .hitathing:
  496.  
  497.  tst.b GotThere 
  498.  beq.s .NoMunch
  499.  tst.w FourthTimer(a0)
  500.  ble.s .OKtomunch
  501.  move.w TempFrames,d0
  502.  sub.w d0,FourthTimer(a0)
  503.  bra.s .NoMunch
  504. .OKtomunch:
  505.  move.w #20,FourthTimer(a0)
  506.  move.l PLR1_Obj,a2
  507.  add.b #2,damagetaken(a2)
  508.  
  509. .NoMunch: 
  510.  
  511.  move.l objroom,a2
  512.  move.w (a2),12(a0)
  513.  move.w newx,(a1)
  514.  move.w newz,4(a1)
  515.  
  516.  move.w (a2),d0
  517.  move.l #ZoneBrightTable,a5
  518.  move.l (a5,d0.w*4),d0
  519.  tst.b ObjInTop(a0)
  520.  bne.s .okbit
  521.  swap d0
  522. .okbit:
  523.  move.w d0,2(a0)
  524.  
  525.  move.l ToZoneFloor(a2),d0
  526.  tst.b ObjInTop(a0)
  527.  beq.s .notintop
  528.  move.l ToUpperFloor(a2),d0
  529. .notintop:
  530.  sub.l #40*128,d0
  531.  asr.l #7,d0
  532.  move.w d0,4(a0)
  533.  
  534.  moveq #0,d2
  535.  move.b damagetaken(a0),d2
  536.  beq .noscream
  537.  
  538.  sub.b d2,numlives(a0)
  539.  bgt .notdeadyet
  540.  
  541.  cmp.b #1,d2
  542.  ble .noexplode
  543.  
  544.  movem.l d0-d7/a0-a6,-(a7)
  545.  sub.l ObjectPoints,a1
  546.  add.l #ObjRotated,a1
  547.  move.l (a1),Noisex
  548.  move.w #400,Noisevol
  549.  move.w #14,Samplenum
  550.  move.b #1,chanpick
  551.  clr.b notifplaying
  552.  st backbeat
  553.  move.b 1(a0),IDNUM
  554.  jsr MakeSomeNoise
  555.  movem.l (a7)+,d0-d7/a0-a6
  556.  
  557.  movem.l d0-d7/a0-a6,-(a7)
  558.  move.w #0,d0
  559.  asr.w #2,d2
  560.  tst.w d2
  561.  bgt.s .ko
  562.  moveq #1,d2
  563. .ko:
  564.  move.w #31,d3
  565.  jsr ExplodeIntoBits
  566.  PROTLCHECK a5
  567.  movem.l (a7)+,d0-d7/a0-a6
  568.  
  569.  cmp.b #40,d2
  570.  blt .notgone
  571.  
  572.  move.w #-1,12(a0)
  573.  move.w 12(a0),GraphicRoom(a0)
  574.  rts
  575.  
  576. .noexplode:
  577.  
  578.  movem.l d0-d7/a0-a6,-(a7)
  579.  sub.l ObjectPoints,a1
  580.  add.l #ObjRotated,a1
  581.  move.l (a1),Noisex
  582.  move.w #200,Noisevol
  583.  move.w screamsound,Samplenum
  584.  move.b #1,chanpick
  585.  clr.b notifplaying
  586.  st backbeat
  587.  move.b 1(a0),IDNUM
  588.  jsr MakeSomeNoise
  589.  movem.l (a7)+,d0-d7/a0-a6
  590.  
  591. .notgone:
  592.  move.b #0,numlives(a0)
  593.  move.w #25,ThirdTimer(a0)
  594.  
  595.  move.w 12(a0),GraphicRoom(a0)
  596.  rts
  597.  
  598. .notdeadyet:
  599.  clr.b damagetaken(a0)
  600.  movem.l d0-d7/a0-a6,-(a7)
  601.  sub.l ObjectPoints,a1
  602.  add.l #ObjRotated,a1
  603.  move.l (a1),Noisex
  604.  move.w #200,Noisevol
  605.  move.w screamsound,Samplenum
  606.  move.b #1,chanpick
  607.  clr.b notifplaying
  608.  move.b 1(a0),IDNUM
  609.  st backbeat
  610.  jsr MakeSomeNoise
  611.  movem.l (a7)+,d0-d7/a0-a6
  612.  
  613. .noscream
  614.  
  615.  move.w TempFrames,d0
  616.  sub.w d0,SecTimer(a0)
  617.  bge.s .nohiss
  618.  
  619.  jsr GetRand
  620.  lsr.w #6,d0
  621.  and.w #1,d0
  622.  add.w #17,d0
  623.  movem.l d0-d7/a0-a6,-(a7)
  624.  sub.l ObjectPoints,a1
  625.  add.l #ObjRotated,a1
  626.  move.l (a1),Noisex
  627.  move.w #800,Noisevol
  628.  move.w d0,Samplenum
  629.  move.b #1,chanpick
  630.  clr.b notifplaying
  631.  move.b 1(a0),IDNUM
  632.  st backbeat
  633.  jsr MakeSomeNoise
  634.  movem.l (a7)+,d0-d7/a0-a6
  635.  
  636.  Jsr GetRand
  637.  lsr.w #6,d0
  638.  and.w #255,d0
  639.  add.w #300,d0
  640.  move.w d0,SecTimer(a0)
  641.  
  642. .nohiss:
  643.  
  644.  move.b ObjInTop(a0),ViewerTop
  645.  move.b PLR1_StoodInTop,TargetTop
  646.  move.l PLR1_Roompt,ToRoom
  647.  move.l objroom,FromRoom
  648.  move.w newx,Viewerx
  649.  move.w newz,Viewerz
  650.  move.w PLR1_xoff,Targetx
  651.  move.w PLR1_zoff,Targetz
  652.  move.l PLR1_yoff,d0
  653.  asr.l #7,d0
  654.  move.w d0,Targety
  655.  move.w 4(a0),Viewery
  656.  jsr CanItBeSeen
  657.  
  658.  clr.b 17(a0)
  659.  
  660.  tst.b CanSee
  661.  beq .carryonprowling
  662.  
  663.  move.b #1,17(a0)
  664.  
  665. .carryonprowling:
  666.  
  667.  move.b ObjInTop(a0),ViewerTop
  668.  move.b PLR2_StoodInTop,TargetTop
  669.  move.l PLR2_Roompt,ToRoom
  670.  move.l objroom,FromRoom
  671.  move.w newx,Viewerx
  672.  move.w newz,Viewerz
  673.  move.w PLR2_xoff,Targetx
  674.  move.w PLR2_zoff,Targetz
  675.  move.l PLR2_yoff,d0
  676.  asr.l #7,d0
  677.  move.w d0,Targety
  678.  move.w 4(a0),Viewery
  679.  jsr CanItBeSeen
  680.  
  681.  tst.b CanSee
  682.  beq .carryonprowling2
  683.  
  684.  or.b #2,17(a0)
  685.  
  686. .carryonprowling2:
  687.  
  688.  move.w 12(a0),GraphicRoom(a0)
  689.  
  690.  rts
  691.  
  692. *************************************************
  693.  
  694. NastyAttackPLR2:
  695.  
  696.  move.w 12(a0),FromZone
  697.  bsr CheckTeleport
  698.  tst.b OKTEL
  699.  beq.s .notel2
  700.  move.l floortemp,d0
  701.  asr.l #7,d0
  702.  add.w d0,4(a0)
  703.  bra .NoMunch2
  704. .notel2:
  705.  
  706.  move.w PLR2_xoff,newx
  707.  move.w PLR2_zoff,newz
  708.  move.w (a0),d1
  709.  move.l #ObjRotated,a6
  710.  move.l ObjectPoints,a1
  711.  lea (a1,d1.w*8),a1
  712.  lea (a6,d1.w*8),a6
  713.  move.w (a1),oldx
  714.  move.w 4(a1),oldz
  715.  move.w maxspd(a0),d2
  716.  muls.w TempFrames,d2
  717.  move.w d2,speed
  718.  move.w #80,Range
  719.  move.w 4(a0),d0
  720.  ext.l d0
  721.  asl.l #7,d0
  722.  sub.l #40*128,d0
  723.  move.l d0,newy
  724.  move.l d0,oldy
  725.  
  726.  move.b ObjInTop(a0),StoodInTop
  727.  movem.l d0/a0/a1/a3/a4/d7,-(a7)
  728.  clr.b canshove
  729.  clr.b GotThere
  730.  jsr HeadTowardsAng
  731.  move.w #%1000000000,wallflags
  732.  
  733.  move.l #%100000,CollideFlags
  734.  jsr Collision
  735.  tst.b hitwall
  736.  beq.s .nothitplayer
  737.  
  738.  move.w oldx,newx
  739.  move.w oldz,newz
  740.  st GotThere
  741.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  742.  bra .hitathing
  743.  
  744. .nothitplayer:
  745.  
  746.  move.l #%11111111110111000001,CollideFlags
  747.  jsr Collision
  748.  tst.b hitwall
  749.  beq.s .canmove
  750.  
  751.  move.w oldx,newx
  752.  move.w oldz,newz
  753.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  754.  bra .hitathing
  755.  
  756. .canmove:
  757.  
  758.  clr.b wallbounce
  759.  Jsr MoveObject
  760.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  761.  move.b StoodInTop,ObjInTop(a0)
  762.  
  763.  move.w AngRet,Facing(a0)
  764.  
  765. .hitathing:
  766.  
  767.  tst.b GotThere 
  768.  beq.s .NoMunch2
  769.  tst.w FourthTimer(a0)
  770.  ble.s .OKtomunch2
  771.  move.w TempFrames,d0
  772.  sub.w d0,FourthTimer(a0)
  773.  bra.s .NoMunch2
  774. .OKtomunch2:
  775.  move.w #20,FourthTimer(a0)
  776.  move.l PLR2_Obj,a2
  777.  add.b #2,damagetaken(a2)
  778.  
  779. .NoMunch2: 
  780.  
  781.  move.l objroom,a2
  782.  move.w (a2),12(a0)
  783.  move.w newx,(a1)
  784.  move.w newz,4(a1)
  785.  
  786.  move.w (a2),d0
  787.  move.l #ZoneBrightTable,a5
  788.  move.l (a5,d0.w*4),d0
  789.  tst.b ObjInTop(a0)
  790.  bne.s .okbit
  791.  swap d0
  792. .okbit:
  793.  move.w d0,2(a0)
  794.  
  795.  move.l ToZoneFloor(a2),d0
  796.  tst.b ObjInTop(a0)
  797.  beq.s .notintop
  798.  move.l ToUpperFloor(a2),d0
  799. .notintop:
  800.  sub.l #40*128,d0
  801.  asr.l #7,d0
  802.  move.w d0,4(a0)
  803.  
  804.  move.b damagetaken(a0),d2
  805.  beq .noscream
  806.  
  807.  sub.b d2,numlives(a0)
  808.  bgt .notdeadyet
  809.  
  810. ; cmp.b #1,d2
  811. ; ble.s .noexplode
  812.  
  813.  movem.l d0-d7/a0-a6,-(a7)
  814.  sub.l ObjectPoints,a1
  815.  add.l #ObjRotated,a1
  816.  move.l (a1),Noisex
  817.  move.w #400,Noisevol
  818.  move.w #14,Samplenum
  819.  move.b #1,chanpick
  820.  clr.b notifplaying
  821.  st backbeat
  822.  move.b 1(a0),IDNUM
  823.  jsr MakeSomeNoise
  824.  movem.l (a7)+,d0-d7/a0-a6
  825.  
  826.  movem.l d0-d7/a0-a6,-(a7)
  827.  move.w #0,d0
  828.  move.w #7,d2
  829.  move.w #31,d3
  830.  jsr ExplodeIntoBits
  831.  movem.l (a7)+,d0-d7/a0-a6
  832.  move.w #-1,12(a0)
  833.  move.w 12(a0),GraphicRoom(a0)
  834.  rts
  835.  
  836. .noexplode:
  837.  
  838.  movem.l d0-d7/a0-a6,-(a7)
  839.  sub.l ObjectPoints,a1
  840.  add.l #ObjRotated,a1
  841.  move.l (a1),Noisex
  842.  move.w #200,Noisevol
  843.  move.w screamsound,Samplenum
  844.  move.b #1,chanpick
  845.  clr.b notifplaying
  846.  st backbeat
  847.  move.b 1(a0),IDNUM
  848.  jsr MakeSomeNoise
  849.  movem.l (a7)+,d0-d7/a0-a6
  850.  move.l deadframe,8(a0)
  851.  move.w 12(a0),GraphicRoom(a0)
  852.  rts
  853.  
  854. .notdeadyet:
  855.  clr.b damagetaken(a0)
  856.  movem.l d0-d7/a0-a6,-(a7)
  857.  sub.l ObjectPoints,a1
  858.  add.l #ObjRotated,a1
  859.  move.l (a1),Noisex
  860.  move.w #200,Noisevol
  861.  move.w screamsound,Samplenum
  862.  move.b #1,chanpick
  863.  clr.b notifplaying
  864.  move.b 1(a0),IDNUM
  865.  st backbeat
  866.  jsr MakeSomeNoise
  867.  movem.l (a7)+,d0-d7/a0-a6
  868.  
  869. .noscream
  870.  
  871.  move.w TempFrames,d0
  872.  sub.w d0,SecTimer(a0)
  873.  bge.s .nohiss
  874.  
  875.  jsr GetRand
  876.  lsr.w #6,d0
  877.  and.w #1,d0
  878.  add.w #17,d0
  879.  movem.l d0-d7/a0-a6,-(a7)
  880.  sub.l ObjectPoints,a1
  881.  add.l #ObjRotated,a1
  882.  move.l (a1),Noisex
  883.  move.w #800,Noisevol
  884.  move.w d0,Samplenum
  885.  move.b #1,chanpick
  886.  clr.b notifplaying
  887.  move.b 1(a0),IDNUM
  888.  st backbeat
  889.  jsr MakeSomeNoise
  890.  movem.l (a7)+,d0-d7/a0-a6
  891.  
  892.  Jsr GetRand
  893.  lsr.w #6,d0
  894.  and.w #255,d0
  895.  add.w #300,d0
  896.  move.w d0,SecTimer(a0)
  897.  
  898. .nohiss:
  899.  
  900.  move.b ObjInTop(a0),ViewerTop
  901.  move.b PLR1_StoodInTop,TargetTop
  902.  move.l PLR1_Roompt,ToRoom
  903.  move.l objroom,FromRoom
  904.  move.w newx,Viewerx
  905.  move.w newz,Viewerz
  906.  move.w PLR1_xoff,Targetx
  907.  move.w PLR1_zoff,Targetz
  908.  move.l PLR1_yoff,d0
  909.  asr.l #7,d0
  910.  move.w d0,Targety
  911.  move.w 4(a0),Viewery
  912.  jsr CanItBeSeen
  913.  
  914.  clr.b 17(a0)
  915.  
  916.  tst.b CanSee
  917.  beq .carryonprowling
  918.  
  919.  move.b #1,17(a0)
  920.  
  921. .carryonprowling:
  922.  
  923.  move.b ObjInTop(a0),ViewerTop
  924.  move.b PLR2_StoodInTop,TargetTop
  925.  move.l PLR2_Roompt,ToRoom
  926.  move.l objroom,FromRoom
  927.  move.w newx,Viewerx
  928.  move.w newz,Viewerz
  929.  move.w PLR2_xoff,Targetx
  930.  move.w PLR2_zoff,Targetz
  931.  move.l PLR2_yoff,d0
  932.  asr.l #7,d0
  933.  move.w d0,Targety
  934.  move.w 4(a0),Viewery
  935.  jsr CanItBeSeen
  936.  
  937.  tst.b CanSee
  938.  beq .carryonprowling2
  939.  
  940.  or.b #2,17(a0)
  941.  
  942. .carryonprowling2:
  943.  
  944.  move.w 12(a0),GraphicRoom(a0)
  945.  
  946.  rts
  947.  
  948.  
  949.